﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using NangLuongTieuDiemDTO.DTO;
using NangLuongTieuDiemBUS;

namespace NangLuongTieuDiemGUI.NangLuongTieuDiemUserControl
{
    public partial class ucThemLoaiSanPham : UserControl
    {
        #region "[Tạo event và delegate để mở usercontrol Lập Hóa đơn]"
        public delegate void ClearItem();
        public event ClearItem ItemEvent;
        public DelegateShowItem showItem = null;
        #endregion
        /// <summary>
        /// Mã loại sản phẩm cần xóa
        /// </summary>
        int IDDelete = -1;

        #region "[khởi tạo mặc định]"
        public ucThemLoaiSanPham()
        {
            InitializeComponent();
        }
        #endregion

        #region "[Load]"
        private void ucThemLoaiSanPham_Load(object sender, EventArgs e)
        {
            try {
                //lấy danh sách các kiểu sản phẩm
                LoadTypeProduct();

                //Load danh sách các loại sản phẩm lên datagridview.
                LoadDataGridView();
                SetStateControl(false);
            }
            catch { }
        }
        #endregion

        #region "[Thêm loại sản phẩm]"
        private void btnThem_Click(object sender, EventArgs e)
        {
            try {
                if (txtTenLoaiSanPham.Text.Trim().Length == 0)
                {
                    ClassUtils.Utils.MassageBoxErrorOtInformation("Tên Loại sản phẩm không được để trống!", "Lỗi", true);
                    return;
                }

                //thêm loại sản phẩm
                LoaiSanPhamDTO Insert = new LoaiSanPhamDTO();
                Insert.TenLoaiSanPham = txtTenLoaiSanPham.Text;
                Insert.Xoa = false;
                Insert.GhiChu = txtGhiChu.Text;
                Insert.LoaiSanPhamChinhID = (int)cmbKieuSanPham.SelectedValue;

                int ID = NangLuongTieuDiem_Management.LoaiSanPham_Insert(Insert);
                if (ID > 0)
                {
                    //load lại danh sách loại sản phẩm
                    LoadDataGridView();
                    ClearDataInput();
                }
                else
                {
                    ClassUtils.Utils.MassageBoxErrorOtInformation("Thêm loại sản phẩm thất bại\r\nLiên hệ 'Người phát triển' để thông báo lỗi này", "Lỗi Thêm Loại sản phẩm", true);
                    return;
                }
            }
            catch (Exception ex) 
            {
                InSert_LoiHeThong("btnThem_Click", ex);
            }
        }
        #endregion

        #region "[Xóa loại sản phẩm]"
        private void btnXoa_Click(object sender, EventArgs e)
        {
            try {
                if (IDDelete > 0)
                {
                    //xóa loại sản phầm.
                    bool isSuccess = NangLuongTieuDiem_Management.LoaiSanPham_Delete(IDDelete);
                    if (isSuccess)
                    {
                        IDDelete = -1;
                        LoadDataGridView();
                        ClearDataInput();
                        SetStateControl(false);
                    }
                    else
                        ClassUtils.Utils.MassageBoxErrorOtInformation("Không thể xóa Loại Sản Phẩm này\r\nPhải xóa sản phẩm thuộc loại này trước\r\nkhi xóa Loại sản phẩm này", "Thông Báo", true);
                }
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("btnXoa_Click", ex);
            }

        }
        #endregion

        #region "[Cập nhật Loại sản phẩm]"
        private void btnSua_Click(object sender, EventArgs e)
        {
            try
            {
                if (IDDelete > 0)
                {
                    if (txtTenLoaiSanPham.Text.Trim().Length > 0)
                    {
                        //cập nhật loại sản phẩm.
                        LoaiSanPhamDTO Item = NangLuongTieuDiem_Management.LoaiSanPham_SelectByPrimaryKey(IDDelete);
                        if (Item != null)
                        {
                            Item.TenLoaiSanPham = txtTenLoaiSanPham.Text;
                            Item.GhiChu = txtGhiChu.Text;
                            Item.LoaiSanPhamChinhID = (int)cmbKieuSanPham.SelectedValue;

                            bool isSuccess = NangLuongTieuDiem_Management.LoaiSanPham_Update(Item);
                            if (isSuccess)
                            {
                                IDDelete = -1;
                                LoadDataGridView();
                                ClearDataInput();
                                SetStateControl(false);
                            }
                        }
                    }
                    else
                    {
                        ClassUtils.Utils.MassageBoxErrorOtInformation("Tên Loại Sản Phẩm khôn được để trống", "Lỗi", true);
                        return;
                    }
                }
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("btnSua_Click", ex);
            }
        }
        #endregion

        #region "[Xóa thẻ]"
        private void btnClear_Click(object sender, EventArgs e)
        {
            try {
                ClearDataInput();
                SetStateControl(false);
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("btnClear_Click", ex);
            }
        }
        #endregion

        #region "[Clear]"
        /// <summary>
        /// Xóa dữ liệu trên các control nhập liệu
        /// </summary>
        private void ClearDataInput()
        {
            try {
                txtGhiChu.Text = txtTenLoaiSanPham.Text = string.Empty;
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("ClearDataInput", ex);
            }
        }
        #endregion

        #region "[load danh sách các loại sản phẩm lên datagridview]"
        /// <summary>
        /// load danh sách các loại sản phẩm lên datagridview
        /// </summary>
        private void LoadDataGridView()
        {
            try {
                List<LoaiSanPhamDTO> list = NangLuongTieuDiem_Management.LoaiSanPham_GetAll().Where(p => p.Xoa == false).ToList();
                if (list.Count > 0)
                    dgvHienThi.DataSource = list;
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("LoadDataGridView", ex);
            }
        }
        #endregion

        #region "[Lấy thông tin trên 1 dòng]"
        private void gridView1_RowClick(object sender, DevExpress.XtraGrid.Views.Grid.RowClickEventArgs e)
        {
            try {
                LoaiSanPhamDTO ItemSelect = (LoaiSanPhamDTO)gridView1.GetRow(e.RowHandle);
                if (ItemSelect != null)
                {
                    IDDelete = ItemSelect.ID;
                    LoadInfomationInControlInputData(ItemSelect);
                    SetStateControl(true);
                }
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("gridView1_RowClick", ex);
            }
        }
        #endregion

        #region "[Đánh số thứ tự]"
        private void gridView1_CustomDrawCell(object sender, DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e)
        {
            try {
                if (e.Column.Name == "colSTT")
                    e.DisplayText = (e.RowHandle + 1).ToString();

                if (e.Column.Name == "colKieu")
                {
                    LoaiSanPhamDTO Item = (LoaiSanPhamDTO)gridView1.GetRow(e.RowHandle);
                    if (Item != null)
                    {
                        LoaiSanPhamChinhDTO ItemType = NangLuongTieuDiemBUS.NangLuongTieuDiem_Management.LoaiSanPhamChinh_SelectByPrimaryKey(Item.LoaiSanPhamChinhID);
                        if (ItemType != null)
                            e.DisplayText = ItemType.TenLoai;

                    }
                }
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("gridView1_CustomDrawCell", ex);
            }
        }
        #endregion

        #region "[Load thông tin trên các control nhập liệu]"
        /// <summary>
        /// Load thông tin trên các control nhập liệu
        /// </summary>
        /// <param name="ItemSelect">đối tượng LoaiSanPham cần load lên các control</param>
        private void LoadInfomationInControlInputData(LoaiSanPhamDTO ItemSelect)
        {
            try {
                txtGhiChu.Text = ItemSelect.GhiChu;
                txtTenLoaiSanPham.Text = ItemSelect.TenLoaiSanPham;
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("LoadInfomationInControlInputData", ex);
            }
        }
        #endregion

        #region "[SetStateControl]"
        private void SetStateControl(bool _isFlag)
        {
            try {
                btnSua.Enabled = btnXoa.Enabled = _isFlag;
                btnThem.Enabled = !_isFlag;
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("SetStateControl", ex);
            }
        }
        #endregion

        #region "[Lấy danh sách các kiểu sản phẩm]"
        /// <summary>
        /// Lấy danh sách các kiểu sản phẩm
        /// </summary>
        private void LoadTypeProduct()
        {
            try {
                List<LoaiSanPhamChinhDTO> list = NangLuongTieuDiemBUS.NangLuongTieuDiem_Management.LoaiSanPhamChinh_GetAll().Where(p => p.Xoa == false).ToList();
                if (list.Count > 0)
                {
                    cmbKieuSanPham.DataSource = list;
                    cmbKieuSanPham.DisplayMember = "TenLoai";
                    cmbKieuSanPham.ValueMember = "ID";
                }

            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("LoadTypeProduct", ex);
            }
        }
        #endregion

        #region "[quay lại màn hình Nhập sản phẩm]"
        private void btnPrevious_Click(object sender, EventArgs e)
        {
            try
            {
                if (ItemEvent != null)
                    ItemEvent();

                if (showItem != null)
                    showItem(true);
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("btnPrevious_Click", ex);
            }
        }
        #endregion

        private void btnThemKieuSanPham_Click(object sender, EventArgs e)
        {

        }

        #region "[Hàm insert lỗi hệ thống]"
        public void InSert_LoiHeThong(string TenHam, Exception ex)
        {
            LoiHeThongDTO lhtDto = new LoiHeThongDTO();
            lhtDto.TenLoi = ex.Message.ToString();
            lhtDto.NgayTao = DateTime.Now;
            lhtDto.TenHamBiLoi = "ucThemLoaiSanPham_" + TenHam;
            lhtDto.SuaLoi = false;
            lhtDto.GhiChu = "";
            NangLuongTieuDiem_Management.LoiHeThong_Insert(lhtDto);
            MessageBox.Show(lhtDto.TenLoi);
        }
        #endregion
    }
}
